import store from '@/store'
import permissionList from '../permission'

// 如果你当前访问的为登录页面，且你还登录过，则直接跳转到后台首页
export const loginChecked = router => (to, from, next) => {
  if ('/login' === to.path && store.getters.token) {
    next({ path: '/admin/main', replace: true })
  } else {
    next()
  }
}

// 是否需要登录后才能访问的页面
export const checkLoginHook = router => (to, from, next) => {
  if ('/login' != to.path) {
    // 只要不是登录页面，都要进行是否已经登录的验证
    if (!store.getters.token) {
      next({ path: '/login', replace: true })
    } else {
      next()
    }
  } else {
    next()
  }
}

// 动态添加路由规则
export const addRouteList = router => (to, from, next) => {
  // 不是登录页面
  if ('/login' != to.path) {
    let adminRoute = router.options.routes.find(({ path }) => '/admin' === path)
    // 保证动态添加在当前操作中只进行1次，提高性能
    if (adminRoute.children.length === 1) {
      // 当前登录的用户拥有的权限列表
      let authList = JSON.parse(sessionStorage.getItem('user')).nodes
      // 让所有的子路由都添加一个路由前缀
      permissionList = permissionList.map(item => ({ ...item, path: '/admin/' + item.path }))
      // 比对当前用户的权限
      let showRouteList = permissionList.filter(({ path }) => authList.some(({ route }) => route === path))
      adminRoute.children.push(...showRouteList)
      router.addRoute(adminRoute)
      // 重定向
      next({ ...to })
    } else {
      next()
    }
  } else {
    next()
  }
}

// 后台页面面包屑导航全局数据设置
export const setNavLlistData = router => (to, from, next) => {
  if ('/login' != to.path) {
    // 设置vuex中的面包屑导航
    store.commit('setNavList', to.meta.breadcrumb)
  }

  next()
}
